home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 1.iso / games / worm.zip / OPTIONS.C < prev    next >
C/C++ Source or Header  |  1992-09-21  |  10KB  |  258 lines

  1.  
  2. #include "worm.h"
  3.  
  4. extern RING* rP;
  5. extern HWND hMainWindow;
  6. extern hInst;
  7.  
  8. BOOL FAR PASCAL OptionsDlgProc(HWND hDlg, unsigned message, WORD wParam,
  9.                              LONG lParam)
  10. {
  11.  
  12. static int sizePos  = DEFAULT_SIZE;
  13. static int speedPos = DEFAULT_SPEED;
  14. static int stepPos  = DEFAULT_STEP;
  15. static int ringsPos = DEFAULT_RINGS;
  16. char buffer[50];
  17.  
  18. switch(message) {
  19.  
  20.     case WM_INITDIALOG:
  21.  
  22.          sizePos  = GetSize();
  23.          speedPos = GetSpeed();
  24.          stepPos  = GetStep();
  25.          ringsPos = GetRings();
  26.  
  27.          SetScrollRange(GetDlgItem(hDlg, IDC_SIZE_BAR),  SB_CTL, MIN_SIZE, MAX_SIZE, TRUE);
  28.          SetScrollPos  (GetDlgItem(hDlg, IDC_SIZE_BAR),  SB_CTL, DEFAULT_SIZE, TRUE);
  29.  
  30.          SetScrollRange(GetDlgItem(hDlg, IDC_SPEED_BAR), SB_CTL, MIN_SPEED, MAX_SPEED, TRUE);
  31.          SetScrollPos  (GetDlgItem(hDlg, IDC_SPEED_BAR), SB_CTL, DEFAULT_SPEED, TRUE);
  32.  
  33.          SetScrollRange(GetDlgItem(hDlg, IDC_STEP_BAR),  SB_CTL, MIN_STEP, MAX_STEP, TRUE);
  34.          SetScrollPos  (GetDlgItem(hDlg, IDC_STEP_BAR),  SB_CTL, DEFAULT_STEP, TRUE);
  35.  
  36.          SetScrollRange(GetDlgItem(hDlg, IDC_RINGS_BAR), SB_CTL, MIN_RINGS, MAX_RINGS, TRUE);
  37.          SetScrollPos  (GetDlgItem(hDlg, IDC_RINGS_BAR), SB_CTL, DEFAULT_RINGS, TRUE);
  38.  
  39.          PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  40.          PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  41.          PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  42.          PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  43.          return (TRUE);
  44.  
  45.     case WO_SPEED_UPDATE:
  46.          wsprintf(buffer, "Speed: %d [ticks/sec.]", speedPos);
  47.          SetDlgItemText(hDlg, IDC_SPEED_TEXT, buffer);
  48.          SetScrollPos  (GetDlgItem(hDlg, IDC_SPEED_BAR), SB_CTL, speedPos, TRUE);
  49.          SetSpeed(speedPos);
  50.          KillTimer(hMainWindow, NULL);
  51.          SetTimer (hMainWindow, NULL, 1000 / GetSpeed(), NULL);
  52.          break;
  53.  
  54.     case WO_STEP_UPDATE:
  55.          wsprintf(buffer, "Step: %d pixels (size+%d)", sizePos+stepPos, stepPos);
  56.          SetDlgItemText(hDlg, IDC_STEP_TEXT, buffer);
  57.          SetScrollPos  (GetDlgItem(hDlg, IDC_STEP_BAR), SB_CTL, stepPos, TRUE);
  58.          CleanUp();
  59.          SetStep(stepPos);
  60.          break;
  61.  
  62.     case WO_SIZE_UPDATE:
  63.          wsprintf(buffer, "Size: %d pixels", sizePos);
  64.          SetDlgItemText(hDlg, IDC_SIZE_TEXT, buffer);
  65.          SetScrollPos  (GetDlgItem(hDlg, IDC_SIZE_BAR), SB_CTL, sizePos, TRUE);
  66.          CleanUp();
  67.          SetSize(sizePos);
  68.          PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  69.          break;
  70.  
  71.     case WO_RINGS_UPDATE:
  72.          wsprintf(buffer, "Rings: %d", ringsPos);
  73.          SetDlgItemText(hDlg, IDC_RINGS_TEXT, buffer);
  74.          SetScrollPos  (GetDlgItem(hDlg, IDC_RINGS_BAR), SB_CTL, ringsPos, TRUE);
  75.          CleanUp();
  76.          FreeWormList();
  77.          SetRings(ringsPos);
  78.          rP = InitWormList();
  79.          break;
  80.  
  81.  
  82.  
  83.     case WM_COMMAND:
  84.          switch(wParam) {
  85.             case IDOK:
  86.                  EndDialog(hDlg, NULL);
  87.                  return (TRUE);
  88.             case IDC_DEFAULT:
  89.                  sizePos  = DEFAULT_SIZE;
  90.                  speedPos = DEFAULT_SPEED;
  91.                  stepPos  = DEFAULT_STEP;
  92.                  ringsPos = DEFAULT_RINGS;
  93.                  PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  94.                  PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  95.                  PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  96.                  PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  97.                  break;
  98.             case IDC_WRITE_INI:
  99.                  {
  100.                   char buffer[5];
  101.                   char fullpath[_MAX_PATH];
  102.                   char drive[_MAX_DRIVE];
  103.                   char dir[_MAX_DIR];
  104.                   char fname[_MAX_FNAME];
  105.                   char ext[_MAX_EXT];
  106.  
  107.                   GetModuleFileName(hInst, fullpath, _MAX_PATH);
  108.  
  109.                   _splitpath(fullpath, drive, dir, fname, ext);
  110.                   *fullpath=0;
  111.                   strcat(fullpath, drive);
  112.                   strcat(fullpath, dir);
  113.                   strcat(fullpath, fname);
  114.                   strcat(fullpath, ".INI");
  115.  
  116.                   if(!WritePrivateProfileString("WORM", "Speed", itoa(speedPos, buffer, 10), fullpath)) {
  117.                      ErrorBox("Error writing to the WORM.INI file!");
  118.                      break;
  119.                   }
  120.                   WritePrivateProfileString("WORM", "Size",  itoa(sizePos,  buffer, 10), fullpath);
  121.                   WritePrivateProfileString("WORM", "Step",  itoa(stepPos,  buffer, 10), fullpath);
  122.                   WritePrivateProfileString("WORM", "Rings", itoa(ringsPos, buffer, 10), fullpath);
  123.                  }
  124.                  break;
  125.  
  126.             case IDC_READ_INI:
  127.                  {
  128.                   char fullpath[_MAX_PATH];
  129.                   char drive[_MAX_DRIVE];
  130.                   char dir[_MAX_DIR];
  131.                   char fname[_MAX_FNAME];
  132.                   char ext[_MAX_EXT];
  133.  
  134.                   GetModuleFileName(hInst, fullpath, _MAX_PATH);
  135.                   _splitpath(fullpath, drive, dir, fname, ext);
  136.                   *fullpath=0;
  137.                   strcat(fullpath, drive);
  138.                   strcat(fullpath, dir);
  139.                   strcat(fullpath, fname);
  140.                   strcat(fullpath, ".INI");
  141.  
  142.                   if(!(speedPos = GetPrivateProfileInt("WORM", "Speed", speedPos, fullpath))) {
  143.                      ErrorBox("Error reading the WORM.INI file!");
  144.                      break;
  145.                   }
  146.                   sizePos  = GetPrivateProfileInt("WORM", "Size",  sizePos,  fullpath);
  147.                   stepPos  = GetPrivateProfileInt("WORM", "Step",  stepPos,  fullpath);
  148.                   ringsPos = GetPrivateProfileInt("WORM", "Rings", ringsPos, fullpath);
  149.                  }
  150.                  PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  151.                  PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  152.                  PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  153.                  PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  154.                  break;
  155.  
  156.          }
  157.          break;
  158.  
  159.  
  160.     case WM_HSCROLL:
  161.          switch (wParam) {
  162.             case SB_LINEUP:
  163.  
  164.                  switch( GetDlgCtrlID(HIWORD(lParam))) {
  165.                     case IDC_SIZE_BAR:
  166.                          if(sizePos > MIN_SIZE) {
  167.                             sizePos--;
  168.                             PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  169.                          }
  170.                          return (TRUE);
  171.  
  172.  
  173.                     case IDC_SPEED_BAR:
  174.                          if(speedPos > MIN_SPEED) {
  175.                             speedPos--;
  176.                             PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  177.                          }
  178.                          return (TRUE);
  179.  
  180.  
  181.                     case IDC_STEP_BAR:
  182.                          if(stepPos > MIN_STEP) {
  183.                             stepPos--;
  184.                             PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  185.                          }
  186.                          return (TRUE);
  187.  
  188.  
  189.                     case IDC_RINGS_BAR:
  190.                          if(ringsPos > MIN_RINGS) {
  191.                             ringsPos--;
  192.                             PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  193.                          }
  194.                          return (TRUE);
  195.                  } /* switch( GetDlgCtrlID(HIWORD(lParam))) */
  196.                  break;
  197.  
  198.             case SB_LINEDOWN:
  199.                  switch( GetDlgCtrlID(HIWORD(lParam))) {
  200.                     case IDC_SIZE_BAR:
  201.                          if(sizePos < MAX_SIZE) {
  202.                             sizePos++;
  203.                             PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  204.                          }
  205.                          return (TRUE);
  206.                     case IDC_SPEED_BAR:
  207.                          if(speedPos < MAX_SPEED) {
  208.                             speedPos++;
  209.                             PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  210.                          }
  211.                          return (TRUE);
  212.                     case IDC_STEP_BAR:
  213.                          if(stepPos < MAX_STEP) {
  214.                             stepPos++;
  215.                             PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  216.                          }
  217.                          return (TRUE);
  218.                     case IDC_RINGS_BAR:
  219.                          if(ringsPos < MAX_RINGS) {
  220.                             ringsPos++;
  221.                             PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  222.                          }
  223.                          return (TRUE);
  224.                  } /* switch( GetDlgCtrlID(HIWORD(lParam))) */
  225.                  break;
  226.  
  227.             case SB_THUMBPOSITION:
  228.                  switch( GetDlgCtrlID(HIWORD(lParam))) {
  229.                     case IDC_SIZE_BAR:
  230.                          sizePos = LOWORD(lParam);
  231.                          PostMessage(hDlg, WO_SIZE_UPDATE, NULL, NULL);
  232.                          return (TRUE);
  233.  
  234.  
  235.                     case IDC_SPEED_BAR:
  236.                          speedPos = LOWORD(lParam);
  237.                          PostMessage(hDlg, WO_SPEED_UPDATE, NULL, NULL);
  238.                          return (TRUE);
  239.  
  240.  
  241.                     case IDC_STEP_BAR:
  242.                          stepPos = LOWORD(lParam);
  243.                          PostMessage(hDlg, WO_STEP_UPDATE, NULL, NULL);
  244.                          return (TRUE);
  245.  
  246.  
  247.                     case IDC_RINGS_BAR:
  248.                          ringsPos = LOWORD(lParam);
  249.                          PostMessage(hDlg, WO_RINGS_UPDATE, NULL, NULL);
  250.                          return (TRUE);
  251.  
  252.                  } /* switch( GetDlgCtrlID(HIWORD(lParam))) */
  253.                  break;
  254.          } /* switch (wParam) */
  255.   } /* switch(message) */
  256.    return(FALSE);
  257. }
  258.